#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define UAL_TOP_DIR "/ual"
#define DI_NAME_HEAD   "di"
#define DI_ON_VALSTR   "0"
#define DI_OFF_VALSTR  "1"

int di_prev_value[12] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
#define DI_TOTAL  (sizeof(di_prev_value)/sizeof(di_prev_value[0]))

int scan_di(int diidx)
{
	FILE *di_value_fphdl;
	char  di_value_fpath[64];
	char  di_value_buf[10];
	int   di_value_int = -1;

	memset(di_value_fpath,0,64);

	sprintf(di_value_fpath,"%s/%s%d/value", UAL_TOP_DIR, DI_NAME_HEAD, diidx);
	if ((di_value_fphdl = fopen(di_value_fpath, "rb")) == NULL) 
	{
		printf("无法打开文件: %s\n",di_value_fpath);
		return 1;
	}
	fread(di_value_buf, sizeof(char), sizeof(di_value_buf) - 1, di_value_fphdl);
	fclose(di_value_fphdl);

	di_value_int = atoi(di_value_buf);
	if(di_value_int != di_prev_value[diidx-1])
	{
        printf("%s%d=%d\n", DI_NAME_HEAD, diidx, di_value_int);
        di_prev_value[diidx-1] = di_value_int;
    }
	return 0;
}

int main(int argc, char **argv)
{
	int diidx = 0;
    printf("当前通道总数: %d\n", DI_TOTAL);
    printf("开始读取通道: \n");
    while(1)
    {
		for ( diidx = 1; diidx <= DI_TOTAL; diidx++ )
		{
	        scan_di(diidx);
	        usleep(100*1000);
		}
    }
	return 0;
}
